#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>
#include <QTimer>
#include <errno.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/prctl.h>
#include <signal.h>
#include <pthread.h>
#include <QDebug>
#include <QtWidgets/QSlider>
#include <QDir>
#include <QListWidgetItem>
#include <QPropertyAnimation>
#include <lyricslist.h>
#include <QModelIndex>
#include <QMap>
#include <QList>
#include <QString>
#include <QModelIndex>
#include <QPushButton>
#include <QSlider>
#include <QTabWidget>
#include <QTabBar>
#include <QWidget>

using namespace std;

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

    //向终端信息
    friend void *sendTerminalInfo(void *arg);
    //接收终端信息
    friend void *rcvTerminalInfo(void *arg);

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();
    //播放器初始化
    void mplayerInit();
    // 扫描歌曲
    void scanMusics();
    //播放音乐
    void playMusic(QString musicName);
    //显示音量条
    void showVolumeSlider();
    //隐藏音量条
    void hideVolumeSlider();
    //静音
    void volumeMute();
    //取消静音
    void volumeNotMute();
    //样式初始化
    void styleInit();
    //设置初始化
    void settingInit();

private slots:
    void on_playBtn_clicked();

    void on_previousBtn_clicked();

    void on_nextBtn_clicked();

    void on_modeBtn_clicked();

    void on_favoriteBtn_clicked();

    void on_listBtn_clicked();

    void on_volumeBtn_clicked();

    void on_progressSlider_sliderMoved(int position);

    void on_progressSlider_valueChanged(int value);

    void on_progressSlider_sliderReleased();

    void slotMoveWidget();

    void on_lyricsList_doubleClicked(const QModelIndex &index);

    void on_musicList_itemDoubleClicked(QListWidgetItem *item);

    void on_likeListWidget_itemDoubleClicked(QListWidgetItem *item);

    void on_musicList_doubleClicked(const QModelIndex &index);

    void on_volumeSlider_sliderMoved(int position);

    void on_volumeSlider_sliderReleased();

    void on_musicTabWidget_tabBarClicked(int index);

private:
    Ui::Widget *ui;
    //子进程号
    pid_t pid;
    //无名管道
    int fd[2];
    //有名管道
    int fifoFd;
    //是否切换音乐标志
    bool isChangeMusic;
    //是否改变歌词
    bool isChangeLyrices;
    //是否快进
    bool isSeek;
    //播放/暂停标志
    bool isPlay;
    //是否为喜欢歌曲
    bool isLike;
    //是否静音;
    bool isMute;

    //是否显示音量进度条
    bool isVolumeShow;
    //是否改变音量大小
    bool isChangeVolume;
    //上次操作时音量的大小
    int previousVolume;
    //当前操作时音量的大小
    int currentVolume;


    //进度条是否改变
    bool isUpdateProgress;
    //当前进度条位置
    int currentPosition;

    //当前播放的索引号
    int currentPlayIndex;
    //当前播放的音乐
    QString currentMusicName;

    //是否显示侧边栏
    bool isShow;
    //侧边栏动画参数
    QPropertyAnimation *anim;
    //用于侧边栏遮罩控件
    QWidget *listMask;
    //侧边栏歌单
    QWidget *musicListWidget;
    //侧边栏喜欢歌单
    QListWidget *likeListWidget;

    //歌词信息
    LyricsList *musicInfo;
    //播放列表
    QMap<int,QString> *playMap;
    //喜欢列表
    QList<QString> *likeList;
    //歌曲总时间
    int totalTime;
    //歌曲当前时间
    int currentTime;

    //播放模式
    int playMode;
    //播放模式枚举
    enum PlayMode{
        LOOP,
        RANDOM,
        SINGLE
    };

};

#endif // WIDGET_H
